A file server is a type of storage server which operates on behalf of one or more clients to store and manage shared files in a set of mass storage devices, such as magnetic or optical storage based disks. The mass storage devices are typically organized as one or more groups of Redundant Array of Independent (or Inexpensive) Disks (RAID). One configuration in which file servers can be used is a network attached storage (NAS) configuration. In a NAS configuration, a file server can be implemented in the form of an appliance, called a filer, that attaches to a network, such as a local area network (LAN) or a corporate intranet. An example of such an appliance is any of the NetApp Filer products made by Network Appliance, Inc. in Sunnyvale, Calif.
A file server can be used to backup data, among other things. One particular type of data backup technique is known as “mirroring”. Mirroring involves backing up data stored at a primary site by storing an exact duplicate (an image) of the data at a remote secondary site. The purpose is that, if data is ever lost at the primary site, it can be recovered from the secondary site.
A mirroring arrangement can be established between two filers. A client may be connected to a first filer. The first filer, or source filer, controls the storage of data generated by the client. The client may be, for example, a bank that generates transactions. The transactions are, for example, account debits or credit card charges. The transactions are generally requests issued by the client to modify data stored on, or add data to, a volume managed by the source filer. The volume on the source filer is mirrored on an image volume on the destination filer in order to preserve the transactions for disaster recovery. The destination filer is connected to the source filer over a network. The destination filer is typically at a different physical location from the source filer, so that if the source filer is disabled, the destination filer will not also be disabled by the event which caused the source filer to go down. A destination filer can mirror several source filers, and a source filer can mirror to several destination filers.
A storage server issues a response to a client after a data access request is completed. An asynchronous mirroring relationship updates the volume and the mirrored volume sometime after a response is received by the client making the request. A synchronous mirroring relationship updates the volume and the mirrored volume as the requests are received and before the response is issued to the client. A fully synchronous mirroring relationship transmits every change requested by a client to both the source and the destination filer and updates the image with every change. The synchronous mirroring relationship reduces the likelihood of losing data, however, the network bandwidth required for fully synchronous mirroring is quite high, and will slow down the filers and the network.
Previous mirroring implementations have used destination filers that establish a fixed portion of memory for each source filer the destination filer is mirroring. The portion of memory is used to store incoming write requests from clients attached to the specific source filer, which can then update the image managed by the destination filer. Reserving a specific portion of memory for each source filer does not use the memory on the destination filer to its full potential, because other source filers cannot access those reserved portions of memory.